#include "judgment_element.h"

void Judgment_Element(ImageInfo &image_info)
{
	// 斑马线和车库

	// 十字
	Element_Cross(image_info);

	// 环岛

	// 直道 和 弯道
}

void Element_Cross(ImageInfo &image_info)
{
	/*2种情况正十字*/

	// 若前瞻很远 如果判断过一次就不需要再判断*/
	if (image_info.ImageStatus.OFFLine > 5 || image_info.Element.Cross != 0)
		return;

	// 1.正入判断
	// TODO 此处可为参数
	if (image_info.ImageStatus.whitelines_L > Sweep_Line_Range && image_info.ImageStatus.whitelines_R > Sweep_Line_Range && image_info.ImageStatus.whitelines > Sweep_Line_Range)
	{
		/*判断一：判断左右方向是否存在大量丢线情况*/
		if (image_info.ImageStatus.whitelines_L + image_info.ImageStatus.whitelines_R <= 40)
			return;

		/*判断二: 顶部10行的宽度跳变是否正常*/
		int toplines_num = 0; // 顶部宽度超过限度的数量
		for (int Ysite = image_info.ImageStatus.OFFLine; Ysite < image_info.ImageStatus.OFFLine + 10; Ysite++)
			if (image_info.ImageDeal[Ysite].Wide < 52 && image_info.ImageDeal[Ysite].Wide > 30)
				toplines_num++;
		if (toplines_num < 7)
			return;

		/*判断三: 底部20行的宽度跳变是否正常*/
		int downlines_num = 0; // 底部宽度超过限度的数量
		for (int Ysite = RESULT_WIDTH - 2; Ysite > RESULT_WIDTH - 2 - 20; Ysite--)
			if (image_info.ImageDeal[Ysite].Wide < 52 && image_info.ImageDeal[Ysite].Wide > 30)
				downlines_num++;
		if (downlines_num < 18)
			return;

		image_info.Element.Cross = 1;
		return;
	}
	// // 2.斜入判断
	// int8_t Direction = 0;
	// if (image_info.ImageStatus.whitelines_L + image_info.ImageStatus.whitelines_R > 40)
	// {
	// 	// 左边大量丢线
	// 	if (image_info.ImageStatus.whitelines_L > image_info.ImageStatus.whitelines_R)
	// 		Direction = 'L';
	// 	// 右边大量丢线
	// 	else if (image_info.ImageStatus.whitelines_L < image_info.ImageStatus.whitelines_R)
	// 		Direction = 'R';
	// }
}
